/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.celiosilva.simbanc.business;

import com.celiosilva.simbanc.beans.Agencia;
import com.celiosilva.simbanc.business.util.Sucesso;
import com.celiosilva.simbanc.dao.Dao;
import com.celiosilva.simbanc.dao.FileDao;
import com.celiosilva.simbanc.exceptions.SistemaException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author celio@celiosilva.com
 */
public class AgenciaBusiness {

    //private                 List<Agencia>                   agencias                = new ArrayList<Agencia>();
    private                 Dao<Integer, Agencia>           dao;
    private static final    AgenciaBusiness                 instance                = new AgenciaBusiness();
    
    private AgenciaBusiness() {
        try {
            dao = new FileDao<Integer, Agencia>(Agencia.class);
        } catch (SistemaException ex) {
            Logger.getLogger(AgenciaBusiness.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static final AgenciaBusiness getInstance(){
        return instance;
    }

    public Sucesso cadastrarAgencia(Agencia agencia) throws SistemaException{
        agencia.setCodigo(dao.size() + 1);
        this.dao.put(agencia.getCodigo(), agencia);
        String mensagem = String.format("Agencia %s - %s cadastrada com sucesso!", 
                                        agencia.getCodigo(),
                                        agencia.getNome());
        dao.commit();
        return new Sucesso(mensagem);
    }

    public Agencia consultarAgencia(int codigoAgencia){
        return dao.get(codigoAgencia);
    }

    public Sucesso desativarAgencia(Agencia agencia) throws SistemaException{
        this.dao.get(agencia.getCodigo()).setAtivo(false);
        this.dao.commit();
        String mensagem = String.format("Agencia %s desativada com sucesso!", agencia.getNome());
        return new Sucesso(mensagem);
    }

    public Sucesso reativarAgencia(Agencia agencia) throws SistemaException{
        this.dao.get(agencia.getCodigo()).setAtivo(true);
        this.dao.commit();
        String mensagem = String.format("Agencia %s reativada com sucesso!", agencia.getNome());
        return new Sucesso(mensagem);
    }

    public List<Agencia> listarAgencias(){
        return new ArrayList<Agencia>(this.dao.values());
    }


}
